#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

// TandemBicycle
// 
// 2 Person 骑车速度不一样的时候，骑车快的人速度为准

// 两队相同的人
// RED  [5, 5, 3, 9, 2]
// BLUE [3, 6, 7, 2, 1]

// 问题
// 编写一个函数，计算红蓝两队能够骑的 最快速度和 或者 最慢速度和
// --------------------------------------------------
// 
// 步骤一、写函数签名
// 返回值类型是什么？函数名(算法同名就好)是什么？有几个参数？
int tandemBicycle(vector<int> red, vector<int> blue, bool fastest) {
  // 步骤二、在注释里，通过一些实验数据推导一下算法的执行过程
  // 问题分解
  // 1. 什么情况下最快
  // 1.1 我们得让红、蓝这两队里，速度快的人尽可能的都被计算进来
  // 2. 什么情况下最慢
  // 2.1 让红、蓝两队里，速度最快的人彼此竞争
  // 步骤三、开始写代码
  sort(red.begin(), red.end());
  sort(blue.begin(), blue.end());

  // RED  [2, 3, 5, 5, 9]
  // BLUE [1, 2, 3, 6, 7]
  // 这时，只要按数组元素位置对号组队，就是最慢速度

  // 如果要最快速度？
  // BLUE 逆序之后，按数组元素位置对号组队
  // RED  [2, 3, 5, 5, 9]
  // BLUE [7, 6, 3, 2, 1]

  if (fastest) {
    reverse(blue.begin(), blue.end());
  }

  int totalSpeed = 0;

  for (int i = 0; i < red.size(); ++i) {
    totalSpeed += max(red[i], blue[i]);
  }

  return totalSpeed;
}

int main(int argc, char const *argv[])
{
  vector<int> red {2, 3, 5, 5, 9};
  vector<int> blue {7, 6, 3, 2, 1};
  
  cout<<tandemBicycle(red, blue, false)<<endl;
  return 0;
}


